package abstractClass;

public abstract class Animal {
    public abstract void rest();
    public abstract void run();
    public void shout(){
        System.out.println("Animal shout");
    }

}


class Dog extends Animal{
    @Override
    public void rest(){
        System.out.println("Dog rest");
    }

    @Override
    public void run(){
        System.out.println("Dog run");
    }

    public void shout(){
        System.out.println("Dog is barking");
    }
}

class Cat extends Animal{
    @Override
    public void rest(){
        System.out.println("Cat rest");
    }

    @Override
    public void run(){
        System.out.println("Cat run");
    }

    public void shout(){
        System.out.println("Cat is mewing");
    }
}


/*
 * 抽象类使用要点:
 * 1.有抽象方法(abstract method)的类必须是抽象类(abstract class)
 * 2.抽象类不能被实例化
 * 3.抽象类可以包含属性，方法，构造方法。但是构造方法不能用来new实例，只能用来被子类调用。
 * 4.抽象类只能用来被继承
 * 5.抽象方法必须被子类实现，除非子类也是抽象类
 */
